#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
校园运动记录工具 - 主入口文件

本程序用于查询学校操场开放时间，结合天气情况生成跑步建议，
并提供校园周边跑步路线图。

使用方法:
    python main.py             # 运行交互式界面
    python main.py --mode once # 只生成一次跑步建议
    python main.py --mode daemon # 后台运行并定时发送提醒
"""

import os
import sys
import logging
import traceback

# 添加项目根目录到系统路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 确保必要的目录存在
def ensure_directories():
    """确保应用所需的目录结构存在"""
    directories = [
        os.path.join(os.path.dirname(__file__), 'logs'),
        os.path.join(os.path.dirname(__file__), 'data'),
        os.path.join(os.path.dirname(__file__), 'config'),
    ]
    
    for directory in directories:
        os.makedirs(directory, exist_ok=True)

# 配置日志
def setup_logging():
    """配置应用日志"""
    log_dir = os.path.join(os.path.dirname(__file__), 'logs')
    log_file = os.path.join(log_dir, 'campus_running.log')
    
    # 配置日志格式
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        handlers=[
            logging.FileHandler(log_file),
            logging.StreamHandler()
        ]
    )
    
    return logging.getLogger('campus_running_main')

# 主函数
def main():
    """主函数"""
    try:
        # 确保目录结构存在
        ensure_directories()
        
        # 设置日志
        logger = setup_logging()
        logger.info("=== 校园运动记录工具启动 ===")
        
        # 导入跑步提醒模块
        try:
            from src.running_reminder import RunningReminder
        except ImportError as e:
            logger.error(f"导入跑步提醒模块失败: {e}")
            print("\n错误: 无法导入跑步提醒模块。")
            print("请确保所有依赖已正确安装，并且项目结构完整。")
            return 1
        
        # 创建并运行跑步提醒
        logger.info("正在生成今日跑步提醒...")
        reminder = RunningReminder()
        today_reminder = reminder.generate_today_reminder()
        formatted_text = reminder.format_reminder_text(today_reminder)
        
        print("\n" + "=" * 50)
        print("📢 今日跑步提醒")
        print("=" * 50)
        print(formatted_text)
        print("=" * 50)
        
        # 输出最佳跑步时间
        best_time = reminder.get_best_running_time_today()
        if best_time:
            print(best_time)
            
        return 0
        
    except KeyboardInterrupt:
        print("\n程序已被用户中断。")
        return 0
    except Exception as e:
        logger.error(f"应用启动失败: {e}")
        logger.error(traceback.format_exc())
        
        print("\n错误: 应用启动失败。")
        print(f"错误详情: {str(e)}")
        print("请查看 logs/campus_running.log 获取完整错误信息。")
        return 1
    finally:
        if 'logger' in locals():
            logger.info("=== 校园运动记录工具结束 ===")

# 程序入口
if __name__ == "__main__":
    sys.exit(main())